﻿using System;
using System.Reflection;
using System.Windows.Forms;

namespace com.darwin.client.clientLoader
{
	/// <summary>
	/// MdiFormUtil 的摘要描述。
	/// </summary>
	public class MdiFormRules
	{
		public MdiFormRules()
		{
			//
			// TODO: 在此加入建構函式的程式碼
			//
		}


        //从dll文件中取得form 列表
		public static string[] getMDIformName (string libName)
		{ 
			
			//Load一个ClassLibrary: 插件
			Assembly a = Assembly.LoadFrom(libName);
			//使用 命名空间(namespace)，利用.net的反射机制将对象创建起来
			//所以，所有的插件使用一个有规律的命名空间，例如使用相同的命名空间或，便于主程序创建插件中的对象
			int i=0;
			string[] formNames=null;
			try
			{
				System.Type[] types = a.GetTypes();
				formNames=new string[types.Length];
				foreach(System.Type type in types)
				{ 	
						formNames[i]=type.ToString();
						i++;
					
				}
				
				
			}
			catch(Exception e)
			{
				MessageBox.Show(e.Message);
			}

			return(formNames);
		}
		public static void loadMDIform(string libName,string typeName,Form MdiParent)//加载form
		{
		  	
			Form f= createForm(libName,typeName);
			f.MdiParent=MdiParent;
			f.Show();
		
		}


		public static Form createForm(string libName,string typeName)//从library中产生一个type类型的 Form
		{    
			Form f =null;
             //Load一个ClassLibrary: 插件
            Assembly a = Assembly.LoadFrom(libName);
			//使用 命名空间(namespace)，利用.net的反射机制将对象创建起来
			//所以，所有的插件使用一个有规律的命名空间，例如使用相同的命名空间或，便于主程序创建插件中的对象
			//object obj=a.CreateInstance("com.darwin.client.form.BaseForm");
            object obj=null;
              try
				{
					obj=a.CreateInstance(typeName);
					if(obj!=null)
					{
									//将object强制转换成插件接口
					f=(Form)obj;
					}
					else{MessageBox.Show("无法创建对象,可能不是有效的类型:"+typeName);}

					}
					catch(Exception e)
					{
					  MessageBox.Show(e.Message);
					}

			return(f);
		}
	}
}